//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "fmPPaperU.h"
#include "dmDataU.h"
#include "SysFuncs.h"
#include "fmUpdateU.h"
#include <string.h>
#include "fmMainU.h"
#include "fmInitFileNoU.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fmVBaseU"
#pragma resource "*.dfm"
TfmPPaper *fmPPaper;
//---------------------------------------------------------------------------
__fastcall TfmPPaper::TfmPPaper(TComponent *Owner): TfmVBase(Owner){}
//---------------------------------------------------------------------------
void __fastcall TfmPPaper::FormActivate(TObject *Sender)
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);

    TADOQuery *qryPropertry(dmData->qry);
    FillCB(cmbTaxType, qryPropertry, "A_TaxType", "TaxType", "");
        //填充   契税种类   组合框
    FillCB(cmbTaxRace, qryPropertry, "A_TaxRace", "TaxRace", "");
        //填充   契税税率 组合框
    FillCB(cmbMaker, qryPropertry, "A_Marker", "Marker");
    FillCB(cmbChecker, qryPropertry, "A_Checker", "Checker");
    FillCB(cmbManageUnit, qryPropertry, "A_ManageUnit", "ManageUnit");

    ToolButton6->Enabled = false; //提交按钮
    qryIndex->Active = true;
    qryMain->Active = true;
    tableOwner->Active = true;
    ControlReadOnlyFun();

    sSql = "select * from InitFileNo";
    ResultSql(q, sSql);


    if (q->RecordCount > 0)
    {
        return ;
    }
    Application->CreateForm(__classid(TfmInitFileNo), &fmInitFileNo);
    fmInitFileNo->ShowModal();



}

//---------------------------------------------------------------------------
//执行添加按钮代码
void __fastcall TfmPPaper::actAddExecute(TObject *Sender)
{
    AnsiString sSql;
    AnsiString sPaper_NO;
    ClearFormFun();
    //产生一个房产证号  房产证的长度为10
    sPaper_NO = CreatePaper_NOFun();
    edtPaper_No->Text = sPaper_NO;

    ToolButton6->Enabled = true; //提交按钮
    ControlWriteFun();
}

//---------------------------------------------------------------------------
//执行提交按钮代码
void __fastcall TfmPPaper::actPostExecute(TObject *Sender)
{
    int nOwnerID; //所有权人ID
    int nPropertyRightID; //所有权性质ID
    int nTaxTypeID; // 契税种类ID
    int nTaxRaceID; //契税税率ID
    AnsiString sSql;

    if (EnsureDatAvalidFun() == false)
    {
        return ;
    }
    //把产权人信息输入到产权人表  p_Owner  中去
    tableOwner->Active = false;
    InsertOwnerFun(edtOwner->Text, 1);

    //把共有权人信息输入到产权人表  P_Owner  中去
    //TStringList *SListNameList = new TStringList();
    //SListNameList = GetOwnerNames(edtOwnerList->Text);//获取共有权人的列表


    //把房屋状况添加到房屋状况表中去
    InsertHoursePropertyFun();

    //把共有权信息插入到  ShareProperty_Paper 共有权证表。
    InsertSharePropertyFun();

    //把契税摘要信息插入到 契税摘要表 P_Contract_Tax  中去
    InsertContract_TaxFun();

    //把他项权利信息插入到他项权利摘要表  P_OtherProperty  中去
    InsertOtherPropertyFun();

    //把国有土地信息插入到国有土地使用表  GroundProperty 中去
    InsertGroundPropertyFun();

    //把房屋所有权证信息插入到房屋所有权证表  Property_Paper  中。
    InsertPropertyPaperFun();
    ToolButton6->Enabled = false; //提交按钮
    ControlReadOnlyFun();
    qryIndex->Close();
    qryIndex->Open();
    tableOwner->Active = true;



}

//--------------------------------------------------------------------------
/*自定义函数*/
/*函数功能: 把共有权人姓名字符串拆分出姓名列表*/
/*参数说明:
AnsiString sOwnerNames:共有有权人的姓名字符串
 */
TStringList *__fastcall TfmPPaper::GetOwnerNames(AnsiString sOwnerNames)
{
    int nNamesLength;
    int nPos;
    AnsiString sName;
    TStringList *SListNameList = new TStringList();

    while (sOwnerNames.Length() > 0)
    {
        sOwnerNames = sOwnerNames.TrimLeft();
        sOwnerNames = sOwnerNames.TrimRight();
        nPos = sOwnerNames.Pos(" ");
        if (nPos == 0)
        {
            SListNameList->Add(sOwnerNames);
            break;
        }
        sName = sOwnerNames.SubString(1, nPos);
        sName = sName.Trim();
        SListNameList->Add(sName);
        sOwnerNames = sOwnerNames.SubString(nPos, sOwnerNames.Length());
    }
    return SListNameList;


}

//---------------------------------------------------------------------------
/*自定义函数
函数功能: 把所有权人、共有权人信息输入到产权人表P_Owner中去
参数说明:
AnsiString sOwnerName ---所有权人的姓名
int nPropertyFlag     ---所有权人的性质
nPropertyFlag=1;代表所有权人
nPropertyFlag=2;代表共有权人
返回值说明:
返回所有权人或共有权人的ID
 */
int __fastcall TfmPPaper::InsertOwnerFun(AnsiString sOwnerName, int
    nPropertyFlag)
{
    int nPropertyRightID; //所有权性质ID
    int nOwnerID; //所有权人ID
    AnsiString sSql;
    TADOQuery *q(dmData->qry);


    nOwnerID = GetMaxRecId(q, "P_Owner", "RNO", "0") + 1; //产生一个产权人ID

    //获取所有权性质
    if (nPropertyFlag == 1)
    {
        sSql =
            "select K_PropertyRight_ID from A_PropertyRight where PropertyRight='" + sOwnerName.Trim() + "'";
    }
    if (nPropertyFlag == 2)
    {
        sSql =
            "select K_PropertyRight_ID from A_PropertyRight where PropertyRight='共有人'";
    }
    ResultSql(q, sSql);
    if (q->RecordCount > 0)
    {
        nPropertyRightID = q->FieldByName("K_PropertyRight_ID")->AsInteger;
    }
    //把产权人加入到产权人表中去
    sSql = "insert into P_Owner values(";
    sSql += IntToStr(nOwnerID) + ","; //ID
    sSql += "'" + sOwnerName + "',"; //产权人姓名
    sSql += "'#',"; //产权人性别
    sSql += "0,"; //产权人年龄
    sSql += "'#',"; //产权人籍贯
    sSql += "'#',"; //产权人住址
    sSql += "'#',"; //产权人工作单位
    sSql += "'#',"; //产权人职业
    sSql += "'#',"; //产权人关系
    sSql += "0.0,"; //应占份数
    sSql += IntToStr(nPropertyRightID) + ")"; //所有权性质
    ExecuteSql(q, sSql);
    return nOwnerID;
}

/*
自定义函数
函数功能:把房屋状况添加到房屋状况表中去
判断在gridPropertyHourse控件中的房屋状况:如果房屋所有的属性为空,则认为不存在该房屋---gridPropertyHourse控件

 */
void __fastcall TfmPPaper::InsertHoursePropertyFun()

{
    int nHourseNum = 0;
    AnsiString sSql;
    TADOQuery *q(dmData->qry);

    //获取房子栋数
    nHourseNum = getBuildingNumFun();


    //把每一栋房子添加到数据库表   P_HouseProperty屋状况表   中去
    for (int i = 0; i < nHourseNum; i++)
    {
        sSql = "insert into P_HouseProperty values(";
        sSql += "'0',"; //ID
        sSql += "'" + edtPaper_No->Text + "',"; //房产证号
        sSql += "'" + gridPropertyHourse->Cells[0][i] + "',"; //栋号
        sSql += "'" + gridPropertyHourse->Cells[1][i] + "',"; //房号
        sSql += gridPropertyHourse->Cells[2][i] + ","; //间数
        sSql += "'" + gridPropertyHourse->Cells[3][i] + "',"; //建筑结构
        sSql += gridPropertyHourse->Cells[4][i] + ","; //层数
        sSql += gridPropertyHourse->Cells[5][i] + ","; //建筑面积
        sSql += "'" + gridPropertyHourse->Cells[6][i] + "')"; //备注
        ExecuteSql(q, sSql);
    }
}

//---------------------------------------------------------------------------
/*
自定义函数
函数功能:把共有权证信息添加到    ShareProperty_Paper共有权证表     中去
 */
void __fastcall TfmPPaper::InsertSharePropertyFun()
{
    int nOwnerNum = 0;
    AnsiString sSql;
    TStringList *SListIDList = new TStringList();
    TStringList *SListShareList = new TStringList();
    int nBuildingNum;
    int nHourseNum;
    float fHourseArea;
    int nMarkerID;
    int nCheckerID;
    int nManageUnitID;
    AnsiString sDate;

    TADOQuery *q(dmData->qry);
    //检查共有权人数量
    for (int i = 0; i < gridOwnerList->RowCount; i++)
    {
        if (gridOwnerList->Cells[0][i] != "")
        {
            nOwnerNum++;
        }
        else
        {
            break;
        }
    }

    //把共有权人添加到共有权权人表中去,
    //同时返回共有权人ID作为一个ID列表存在SListIDList中
    for (int i = 0; i < nOwnerNum; i++)
    {
        int nID = 0;
        nID = InsertOwnerFun(gridOwnerList->Cells[0][i], 2);
            //插入共有人信息输入到产权人表  p_Owner  中去

        SListIDList->Add(IntToStr(nID));
        edtOwnerList->Text = edtOwnerList->Text + gridOwnerList->Cells[0][i] +
            "   ";

    }




    //获取缮证人 ID
    nMarkerID = GetID(q, "A_Marker", "RID", "Marker", cmbMaker->Text);
    //获取校对人ID
    nCheckerID = GetID(q, "A_Checker", "RID", "Checker", cmbMaker->Text);
    //获取填发机关ID
    nManageUnitID = GetID(q, "A_ManageUnit", "RID", "ManageUnit", cmbManageUnit
        ->Text);
    //获取栋数
    nBuildingNum = getBuildingNumFun();
    //获取间数
    nHourseNum = getHourseNumFun();
    //获取建筑面积
    fHourseArea = getHourseAreaFun();
    //获取日期
    sDate = FormatDateTime("YYYY.MM.DD", dataSendOutDate->Date);
    //把每一个共有权证信息保存到ShareProperty_Paper 共有权证表。
    for (int i = 0; i < nOwnerNum; i++)
    {
        //产生共有权证号 ,把共有权证号列表存在SListShareList中
        AnsiString sShare_ID;
        sShare_ID = CreateShareProperty_NOFun();

        SListShareList->Add(sShare_ID);
        sSql = "insert into ShareProperty_Paper values(";
        sSql += "'0',"; //ID
        sSql += "'" + edtPaper_No->Text + "',"; //所有权证编号
        sSql += "'" + SListShareList->Strings[i] + "',"; //共有权证号
        sSql += "'" + SListIDList->Strings[i] + "',"; // 共有人编号
        sSql += gridOwnerList->Cells[1][i] + ","; //共有份额
        sSql += IntToStr(nBuildingNum) + ","; //栋数
        sSql += IntToStr(nHourseNum) + ","; //间数
        sSql += FloatToStr(fHourseArea) + ","; //建筑面积
        sSql += IntToStr(nMarkerID) + ","; //缮证人
        sSql += IntToStr(nCheckerID) + ","; //校对人
        sSql += IntToStr(nManageUnitID) + ","; //填发机关
        sSql +=  + "'" + sDate + "',"; //填发日期
        sSql +=  + "'" + sDate + "',"; //领证日期
        sSql +=  + "'" + gridOwnerList->Cells[3][i] + "')"; //备注

        ExecuteSql(q, sSql);
    }

}

//---------------------------------------------------------------------------

/*
自定义函数:
函数说明:
把契税摘要信息插入到 契税摘要表 P_Contract_Tax  中去
 */
void __fastcall TfmPPaper::InsertContract_TaxFun()
{
    int nTaxType_ID = 0;
    int nTaxRace_ID = 0;
    int nRNO;
    AnsiString sSql;
    AnsiString sDate;
    TADOQuery *q(dmData->qry);
    if ((EdtPrice->Text == "") || (cmbTaxType->Text == "") || (cmbTaxRace->Text
        == "") || (edtTax->Text == ""))
    {
        return ;
    }
    //获取契税种类ID
    nTaxType_ID = GetID(q, "A_TaxType", "RID", "TaxType", cmbTaxType->Text);

    //获取契税税率ID
    nTaxRace_ID = GetID(q, "A_TaxRace", "RID", "TaxRace", cmbTaxRace->Text);

    //获取日期
    sDate = FormatDateTime("YYYY.MM.DD", dataStartData->Date);
    sSql = "insert into P_Contract_Tax values(";
    sSql += "'0',"; //唯一的内部编号
    sSql += "'" + edtPaper_No->Text + "',"; //所有权证编号
    sSql += "'" + sDate + "',"; //立契日期
    sSql += EdtPrice->Text + ","; //契价
    sSql += IntToStr(nTaxType_ID) + ","; //外键,契税种类
    sSql += IntToStr(nTaxRace_ID) + ","; //外键,契税税率
    sSql += edtTax->Text + ","; //金额
    sSql += "'" + edtNote->Text + "')"; //备注

    ExecuteSql(q, sSql);

}

//---------------------------------------------------------------------------

/*
自定义函数
函数说明:
把他项权利信息插入到 P_OtherProperty 他项权利摘要表。
 */
void __fastcall TfmPPaper::InsertOtherPropertyFun()
{
    int nOtherPropertyNum = 0;
    AnsiString sSql;
    AnsiString sDate;
    TADOQuery *q(dmData->qry);

    //检查他项权利数量数量
    for (int i = 0; i < gridOtherProperty->RowCount; i++)
    {
        if (gridOtherProperty->Cells[0][i] != "")
        {
            nOtherPropertyNum++;
        }
        else
        {
            break;
        }
    }

    //把他项权利信息插入到 P_OtherProperty 他项权利摘要表
    for (int i = 0; i < nOtherPropertyNum; i++)
    {
        sDate = FormatDateTime("YYYY.MM.DD", StrToDateTime(gridOtherProperty
            ->Cells[7][i]));
        sSql = "insert into P_OtherProperty values(";
        sSql += "'0',"; //唯一的内部编号
        sSql += "'" + edtPaper_No->Text + "',"; //所有权证编号
        sSql += "'" + gridOtherProperty->Cells[1][i] + "',"; //权利种类
        sSql += "'" + gridOtherProperty->Cells[0][i] + "',"; //权利人
        sSql += "'0',"; //房屋编号
        sSql += "'" + gridOtherProperty->Cells[2][i] + "',"; //房号
        sSql += "'" + gridOtherProperty->Cells[3][i] + "',"; //间数
        sSql += "'" + gridOtherProperty->Cells[4][i] + "',";
        ; //建筑面积
        sSql += gridOtherProperty->Cells[5][i] + ",";
        ; //权利价值
        sSql += "'" + gridOtherProperty->Cells[6][i] + "',";
        ; //存续期限
        sSql += "'" + sDate + "')";
        ; //注销日期

        ExecuteSql(q, sSql);

    }

}

//-------------------------------------------------------------------------
/*
自定义函数
函数说明:
//把国有土地信息插入到国有土地使用表  GroundProperty 中去
 */
void __fastcall TfmPPaper::InsertGroundPropertyFun()
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);
    if (edtUsedAreaM2->Text == "" || edtUsedArea->Text == "" || edtFileNo->Text
        == "")
    {
        return ;
    }
    sSql = "insert into P_GroundProperty values(";
    sSql += "'0',"; // 唯一的内部编号
    sSql += "'" + edtPaper_No->Text + "',"; // 所有权证编号
    sSql += "'桂房证',"; // 土地使用证字
    sSql += "'" + edtFileNo->Text + "',"; // 土地使用证号
    sSql += "'" + edtUsedAreaM2->Text + "',"; // 使用国有土地面积(平方米)
    sSql += "'" + edtUsedArea->Text + "')"; // 使用国有土地面积(亩)
    ExecuteSql(q, sSql);

}

//-------------------------------------------------------------------------
/*
自定义函数
函数说明:
//把国有土地信息插入到国有土地使用表  GroundProperty 中去
 */
void __fastcall TfmPPaper::InsertPropertyPaperFun()
{
    int nOwnerID; //所有权人ID
    int nPropertyRightID;
    int nManageUnitID;
    int nMarkerID;
    int nCheckerID;
    AnsiString sSql;
    AnsiString sDate;
    TADOQuery *q(dmData->qry);

    //获取所有权性质
    sSql =
        "select K_PropertyRight_ID from A_PropertyRight where PropertyRight='"
        + edtPropertyRight->Text + "'";
    ResultSql(q, sSql);
    if (q->RecordCount > 0)
    {
        nPropertyRightID = q->FieldByName("K_PropertyRight_ID")->AsInteger;
    }
    //获取填发机关ID
    nManageUnitID = GetID(q, "A_ManageUnit", "RID", "ManageUnit", cmbManageUnit
        ->Text);

    //获取缮证人 ID
    nMarkerID = GetID(q, "A_Marker", "RID", "Marker", cmbMaker->Text);
    //获取校对人ID
    nCheckerID = GetID(q, "A_Checker", "RID", "Checker", cmbChecker->Text);
    //获取日期
    sDate = FormatDateTime("YYYY.MM.DD", dataSendOutDate->Date);
    nOwnerID = GetMaxRecId(q, "P_Owner", "RNO", "0") + 1; //产生一个产权人ID
    InsertOwnerFun(edtOwner->Text, 1);
    sSql = "insert into Property_Paper values(";
    sSql += "'0',";
    sSql += "'桂房证',";

    sSql += "'" + edtPaper_No->Text + "',"; // 房产证号;

    sSql += "'0',"; // 申请审批表编号
    sSql += "'" + IntToStr(nOwnerID) + "',"; // 所有权人编号
    sSql += "'" + edtOwnerList->Text + "',"; //共有人
    sSql += "'" + edtPosition->Text + "',"; //房屋座落;
    sSql += "'" + edtGround_No->Text + "',"; //地号
    sSql += IntToStr(nPropertyRightID) + ","; // 所有权性质
    sSql += "'0',"; // 状态
    sSql += IntToStr(nManageUnitID) + ","; // 填发机关
    sSql += IntToStr(nMarkerID) + ","; //缮证人
    sSql += IntToStr(nCheckerID) + ","; //校对人
    sSql +=  + "'" + sDate + "',"; //填发日期
    sSql +=  + "'" + sDate + "',"; //领证日期
    sSql +=  + "'" + memRemark->Text + "')"; //附记

    ExecuteSql(q, sSql);
}

//---------------------------------------------------------------------------
/*
自定义函数
函数说明:
产生一个房产证号  房产证的长度为10:
 */
AnsiString __fastcall TfmPPaper::CreatePaper_NOFun()
{
    /*int i, iLength;
    AnsiString  sPaper_NO;
    iLength = dmData->GetAValue("select top 1 FileNOLength from InitFileNo");
    sPaper_NO = dmData->GetAValue("select top 1 Paper_NO from Property_Paper order by Paper_NO desc");
    if (sPaper_NO == "")
    {
    sPaper_NO = dmData->GetAValue("select top 1 isnull(FileNOStart, '0') from InitFileNo");
    }
    sPaper_NO = IntToStr(StrToInt(sPaper_NO) + 1);
    while(sPaper_NO.Length() < iLength)
    {
    sPaper_NO = "0" + sPaper_NO;
    }
    return sPaper_NO;
     */


    TADOQuery *q(dmData->qry);
    AnsiString sSql;
    AnsiString sPaper_NO;
    int nFileNoLength;



    sSql = "select * from InitFileNo";
    ResultSql(q, sSql);

    if (q->RecordCount > 0)
    {
        sPaper_NO = q->FieldByName("FileNoStart")->AsString;
        nFileNoLength = q->FieldByName("FileNoLength")->AsInteger;
        sPaper_NO = sPaper_NO.Trim();
        sPaper_NO = IntToStr((StrToInt(sPaper_NO) + 1));

        sSql = "select Paper_NO from Property_Paper";
        ResultSql(q, sSql);
        q->First();
        if (q->Eof)
        {
            while (sPaper_NO.Length() < nFileNoLength)
            {
                sPaper_NO = "0" + sPaper_NO;
            }
            return sPaper_NO;

        }
    }
    else
    {
        sPaper_NO = "0000000000";
        nFileNoLength = 10;
    }

    //sSql = "select Paper_NO from Property_Paper";
    //ResultSql(q,sSql);
    q->First();

    while (!q->Eof)
    {
        AnsiString sNO_Buf;
        sNO_Buf = q->FieldByName("Paper_NO")->AsString;
        if (strcmp(sNO_Buf.c_str(), sPaper_NO.c_str()))
        {
            sPaper_NO = sNO_Buf;
        }
        q->Next();
    }

    while (sPaper_NO.Length() > 0 && sPaper_NO.SubString(1, 1) != "0")
    {
        sPaper_NO = sPaper_NO.SubString(2, sPaper_NO.Length());
    }

    sPaper_NO = IntToStr((StrToInt(sPaper_NO) + 1));
    while (sPaper_NO.Length() < nFileNoLength)
    {
        sPaper_NO = "0" + sPaper_NO;
    }
    return sPaper_NO;

}

//---------------------------------------------------------------------------
/*
自定义函数
函数说明:
产生一个共有权证号  共有权的长度为10:
 */
AnsiString __fastcall TfmPPaper::CreateShareProperty_NOFun()
{
    TADOQuery *q(dmData->qry);
    AnsiString sSql;
    AnsiString sShareProperty_NO;
    sSql = "select ShareProperty_Paper_NO from ShareProperty_Paper";
    ResultSql(q, sSql);
    q->First();
    sShareProperty_NO = "0000000000";
    while (!q->Eof)
    {
        AnsiString sNO_Buf;

        sNO_Buf = q->FieldByName("ShareProperty_Paper_NO")->AsString;

        if (strcmp(sNO_Buf.c_str(), sShareProperty_NO.c_str()))
        {
            sShareProperty_NO = sNO_Buf;
        }
        q->Next();
    }
    while (sShareProperty_NO.Length() > 0 && sShareProperty_NO.SubString(1, 1)
        != "0")
    {
        sShareProperty_NO = sShareProperty_NO.SubString(2,
            sShareProperty_NO.Length());
    }
    sShareProperty_NO = IntToStr((StrToInt(sShareProperty_NO) + 1));
    while (sShareProperty_NO.Length() < 10)
    {
        sShareProperty_NO = "0" + sShareProperty_NO;
    }
    return sShareProperty_NO;
}

/*
自定义函数
函数说明:用来获取房子栋数
返回值说明:返回房子栋数
 */
int __fastcall TfmPPaper::getBuildingNumFun()
{
    int nBuildingNum = 0;
    //for循环判断在 gridPropertyHourse中一共有多少栋房子
    for (int i = 0; i < gridPropertyHourse->RowCount; i++)
    {
        for (int j = 0; j < gridPropertyHourse->ColCount; j++)
        {
            if (gridPropertyHourse->Cells[j][i] != "")
            {
                nBuildingNum++;
                break;
            }
        }
        if (nBuildingNum != i + 1)
        {
            break;
        }
    }
    return nBuildingNum;
}

//---------------------------------------------------------------------------
/*
自定义函数
函数说明:用来获取房子间数
返回值说明:返回房子间数
 */
int __fastcall TfmPPaper::getHourseNumFun()
{
    int nHourseNum = 0;
    int nBuildingNum = 0;
    //获取房子栋数
    nBuildingNum = getBuildingNumFun();
    //计算房子的总间数

    for (int i = 0; i < nBuildingNum; i++)
    {
        nHourseNum += StrToInt(gridPropertyHourse->Cells[1][i]);

    }
    return nHourseNum;
}

/*
自定义函数
函数说明:用来获取房子总面积
返回值说明:返回房子总面积
 */
//----------------------------------------------------------------------
float __fastcall TfmPPaper::getHourseAreaFun()
{
    float fHourseArea = 0.0;
    int nBuildingNum = 0;
    //获取房子栋数
    nBuildingNum = getBuildingNumFun();
    //计算房子的总间数
    for (int i = 0; i < nBuildingNum; i++)
    {

        fHourseArea += StrToFloat(gridPropertyHourse->Cells[5][i]);
    }
    return fHourseArea;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::actCancleExecute(TObject *Sender)
{
    ToolButton6->Enabled = false; //提交按钮
    ControlReadOnlyFun();
}

//---------------------------------------------------------------------------

/*
/*
自定义函数
函数说明:显示所有权证*/
//---------------------------------------------------------------------------
void __fastcall TfmPPaper::ShowProperty_PaperFun()
{
    int nOwnerName;
    int nPropertyRight;
    int nManageUnit;
    int nMarker;
    int nChecker;
    AnsiString sOwnerId;
    AnsiString sOwnerName;
    AnsiString sPropertyRight;
    AnsiString sManageUnit;
    AnsiString sMarker;
    AnsiString sChecker;
    TADOQuery *q(dmData->qry);

    //获得所有权人姓名
    sOwnerId = (qryIndex->FieldByName("K_Owner_NO")->AsString); //获得ID
    m_sOwnerID = sOwnerId;
    sOwnerName = GetNameFieldFromIDFieldS(q, "P_Owner", "OwnerName", "RNO",
        sOwnerId);

    //获得所有权性质
    nPropertyRight = qryIndex->FieldByName("K_PropertyRight_ID")->AsInteger;
    sPropertyRight = GetNameFieldFromIDFieldN(q, "A_PropertyRight",
        "PropertyRight", "K_PropertyRight_ID", nPropertyRight);

    //获取填发机关
    nManageUnit = qryIndex->FieldByName("K_ManageUnit_ID")->AsInteger;

    sManageUnit = GetNameFieldFromIDFieldN(q, "A_ManageUnit", "ManageUnit",
        "RID", nManageUnit);

    //获取缮证人
    nMarker = qryIndex->FieldByName("K_Maker_ID")->AsInteger;

    sMarker = GetNameFieldFromIDFieldN(q, "A_Marker", "Marker", "RID", nMarker);
    //获取校对人
    nChecker = qryIndex->FieldByName("K_Checker_ID")->AsInteger;

    sChecker = GetNameFieldFromIDFieldN(q, " A_Checker", "Checker", "RID",
        nChecker);

    //显示所有权人姓名
    edtOwner->Text = sOwnerName;
    edtPaper_No->Text = qryIndex->FieldByName("Paper_NO")->AsString;
    //显示所有权性质
    edtPropertyRight->Text = sPropertyRight;
    edtOwnerList->Text = qryIndex->FieldByName("OwnerList")->AsString;
    edtPosition->Text = qryIndex->FieldByName("House_Position")->AsString;
    edtGround_No->Text = qryIndex->FieldByName("Ground_NO")->AsString;
    memRemark->Text = qryIndex->FieldByName("Remark")->AsString;
    cmbMaker->Text = sMarker;
    cmbChecker->Text = sChecker; //SendOutDate
    dataSendOutDate->DateTime = qryIndex->FieldByName("SendOutDate")
        ->AsDateTime;
    cmbManageUnit->Text = sManageUnit;
}

/*
自定义函数
函数说明:显示契税摘要
 */
void __fastcall TfmPPaper::ShowP_Contract_TaxFun()
{
    int nTaxType;
    int nTaxRace;
    AnsiString sTaxType;
    AnsiString sTaxRace;
    AnsiString sSql;
    TADOQuery *q(dmData->qry);


    sSql = "select * from P_Contract_Tax where Paper_NO='" + edtPaper_No->Text
        + "'";
    ResultSql(q, sSql);
    if (!q->IsEmpty())
    {
        //获取契税种类ID
        nTaxType = q->FieldByName("K_TaxType_ID")->AsInteger;
        //获取契税税率ID
        nTaxRace = q->FieldByName("K_TaxRace_ID")->AsInteger;
        EdtPrice->Text = q->FieldByName("Price")->AsFloat;
        edtTax->Text = q->FieldByName("Tax")->AsFloat;
        edtNote->Text = q->FieldByName("Note")->AsString;
        //获取契税种类
        sTaxType = GetNameFieldFromIDFieldN(q, "A_TaxType", "TaxType", "RID",
            nTaxType);
        //获取契税税率
        sTaxRace = GetNameFieldFromIDFieldN(q, "A_TaxRace", "TaxRace", "RID",
            nTaxRace);
        cmbTaxType->Text = sTaxType;
        cmbTaxRace->Text = sTaxRace;
    }
}

//---------------------------------------------------------------------
/*
自定义函数:
函数说明:
//显示共有权证
 */
TStringList *__fastcall TfmPPaper::ShowShareProperty_PaperFun()
{
    int nOwnerName;
    AnsiString sOwnerName;
    AnsiString sSql;
    TStringList *sListOwnerNameId = new TStringList();
    TStringList *sListOwnerName = new TStringList();
    TADOQuery *q(dmData->qry);
    sSql = "select * from ShareProperty_Paper where K_Paper_NO='" + edtPaper_No
        ->Text + "'";
    ResultSql(q, sSql);


    for (int i = 0; i < gridOwnerList->RowCount; i++)
    {
        for (int j = 0; j < gridOwnerList->ColCount; j++)
        {
            gridOwnerList->Cells[j][i] = "";
        }

    }
    q->First();
    for (int i = 0; i < q->RecordCount; i++)
    {
        //获取共有人编号
        nOwnerName = StrToInt((q->FieldByName("K_Owner_NO")->AsString));
        sListOwnerNameId->Add(IntToStr(nOwnerName));
        gridOwnerList->Cells[1][i] = FloatToStr(q->FieldByName("Share")
            ->AsFloat);
        gridOwnerList->Cells[2][i] = q->FieldByName("ShareProperty_Paper_NO")
            ->AsString;
        gridOwnerList->Cells[3][i] = q->FieldByName("Remark")->AsString;
        q->Next();
    }
    for (int i = 0; i < sListOwnerNameId->Count; i++)
    {
        nOwnerName = StrToInt(sListOwnerNameId->Strings[i]);
        sOwnerName = GetNameFieldFromIDFieldN(q, "P_Owner", "OwnerName", "RNO",
            nOwnerName);
        gridOwnerList->Cells[0][i] = sOwnerName;
        sListOwnerName->Add(sOwnerName);
    }
    return sListOwnerName;
}

/*
自定义函数:
函数说明:
//显示他项权利摘要
 */
void __fastcall TfmPPaper::ShowP_OtherPropertyFun()
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);
    sSql = "select * from P_OtherProperty where Paper_NO='" + edtPaper_No->Text
        + "'";
    ResultSql(q, sSql);
    //清空他项权利摘要StringGrid控件
    for (int i = 0; i < gridOtherProperty->RowCount; i++)
    {
        for (int j = 0; j < gridOtherProperty->ColCount; j++)
        {
            gridOtherProperty->Cells[j][i] = "";
        }
    }
    q->First();
    for (int i = 0; i < q->RecordCount; i++)
    {
        gridOtherProperty->Cells[0][i] = q->FieldByName("Obligee")->AsString;
            //权利人
        gridOtherProperty->Cells[1][i] = q->FieldByName("PropertyType")
            ->AsString; //权利种类
        gridOtherProperty->Cells[2][i] = q->FieldByName("K_House_NO")
            ->AsString; //房号
        gridOtherProperty->Cells[3][i] = q->FieldByName("Room")->AsInteger;
            //间数
        gridOtherProperty->Cells[4][i] = q->FieldByName("Structure_Area")
            ->AsFloat; //建筑面积
        gridOtherProperty->Cells[5][i] = q->FieldByName("Pro_Value")->AsFloat;
            //权利价值
        gridOtherProperty->Cells[6][i] = DateToStr(q->FieldByName("Available")
            ->AsDateTime); //存续期限
        gridOtherProperty->Cells[7][i] = DateToStr(q->FieldByName("CheckOff")
            ->AsDateTime); //注销期限
        q->Next();
    }
}

//------------------------------------------------------------------------
/*
自定义函数:
函数说明:
//显示房屋状况
 */
void __fastcall TfmPPaper::ShowP_PropertyHouseFun()
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);
    sSql = "select * from P_HouseProperty where Paper_NO='" + edtPaper_No->Text
        + "'";
    ResultSql(q, sSql);
    //清空房屋状况StringGrid控件
    for (int i = 0; i < gridPropertyHourse->RowCount; i++)
    {
        for (int j = 0; j < gridPropertyHourse->ColCount; j++)
        {
            gridPropertyHourse->Cells[j][i] = "";
        }
    }
    q->First();
    m_nHourseNum = q->RecordCount;
    for (int i = 0; i < q->RecordCount; i++)
    {
        gridPropertyHourse->Cells[0][i] = q->FieldByName("Building_NO")
            ->AsString; //栋号
        gridPropertyHourse->Cells[1][i] = q->FieldByName("Doorplate_NO")
            ->AsString; //房号
        gridPropertyHourse->Cells[2][i] = q->FieldByName("Room")->AsInteger;
            //间数
        gridPropertyHourse->Cells[3][i] = q->FieldByName("Structure")
            ->AsString; //结构
        gridPropertyHourse->Cells[4][i] = q->FieldByName("Floor")->AsInteger;
            //层数
        gridPropertyHourse->Cells[5][i] = q->FieldByName("Structure_Area")
            ->AsFloat; //结构面积
        gridPropertyHourse->Cells[6][i] = q->FieldByName("Note")->AsString;
            //备注
        q->Next();
    }
}

/*
自定义函数:
函数说明:
获取建筑面积
 */
void __fastcall TfmPPaper::ShowGroundPropertyFun()
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);
    sSql = "select * from P_GroundProperty where Paper_NO='" + edtPaper_No
        ->Text + "'";
    ResultSql(q, sSql);
    if (!q->IsEmpty())
    {
        edtFile->Text = q->FieldByName("File_NO_Head")->AsString; //土地字
        edtFileNo->Text = q->FieldByName("File_NO")->AsString; //土地号
        edtUsedAreaM2->Text = q->FieldByName("UsedAreaM2")->AsFloat; //土地面积
        edtUsedArea->Text = q->FieldByName("UsedArea")->AsFloat; //土地亩
    }
}

//-------------------------------------------------------------------------
void __fastcall TfmPPaper::qryIndexAfterScroll(TDataSet *DataSet)
{
    ClearFormFun();
    //显示所有权
    ShowProperty_PaperFun();

    //显示房屋状况
    ShowP_PropertyHouseFun();
    //显示他项权利摘要
    ShowP_OtherPropertyFun();
    //显示契税摘要
    ShowP_Contract_TaxFun();
    //显示供有权人摘要
    ShowShareProperty_PaperFun();
    //显示土地信息
    ShowGroundPropertyFun();
    if (DataSet->FieldByName("Paper_NO")->AsString != "")
    {
        qryPicture->Close();
        qryPicture->SQL->Text =
            "select top 1 * from P_HousePicture where Paper_NO='" + DataSet
            ->FieldByName("Paper_NO")->AsString + "'";
        ;
        qryPicture->Open();
    }
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::actEditExecute(TObject *Sender)
{
    Application->CreateForm(__classid(TfmUpdate), &fmUpdate);
    fmUpdate->ShowModal();
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::actDeleteExecute(TObject *Sender)
{
    AnsiString sSql;
    TADOQuery *q(dmData->qry);
    sSql = "update Property_Paper  set FNO ='1' where Paper_NO='" + edtPaper_No
        ->Text + "'";
    ExecuteSql(q, sSql);
    sSql = "select * from Property_Paper where FNO ='0'";
    ExecuteSql(qryIndex, sSql);
    qryIndex->Active = true;
}

//---------------------------------------------------------------------------
void __fastcall TfmPPaper::edtLocateKeyPress(TObject *Sender, char &Key)
{
    TLocateOptions Opts;

    Opts.Clear();
    Opts << loPartialKey;
    Variant locvalue;
    if (Key == 13)
    {
        locvalue = Variant(edtLocate->Text);
        qryIndex->Locate("Paper_NO", locvalue, Opts);
    }
}

//---------------------------------------------------------------------------


void __fastcall TfmPPaper::cmbMakerKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbCheckerKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbPropertyRightKeyPress(TObject *Sender, char &Key)
{
    // Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbPropertyRightChange(TObject *Sender)
{
    //  cmbPropertyRight->Text = "所有人";
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbTaxTypeKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbTaxRaceKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::cmbManageUnitKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::edtFileKeyPress(TObject *Sender, char &Key)
{
    Key = 0;
}

//---------------------------------------------------------------------------
/*
自定义函数
函数说明:
用来判断在提交的之前检查数据的有效性
 */

bool __fastcall TfmPPaper::EnsureDatAvalidFun()
{
    if (edtOwner->Text == "")
    {
        ::MessageBox(this->Handle, "所有权人姓名不能为空!", "警告",
            MB_ICONERROR);
        return false;
    }
    if (cmbMaker->Text == "")
    {
        ::MessageBox(this->Handle, "缮证人姓名不能为空!", "警告", MB_ICONERROR)
            ;
        return false;
    }
    if (cmbChecker->Text == "")
    {
        ::MessageBox(this->Handle, "校对人姓名不能为空!", "警告", MB_ICONERROR)
            ;
        return false;
    }
    if (cmbManageUnit->Text == "")
    {
        ::MessageBox(this->Handle, "填发机关不能为空!", "警告", MB_ICONERROR);
        return false;
    }
}

void __fastcall TfmPPaper::ControlReadOnlyFun()
{
    edtPaper_No->ReadOnly = true;
    edtPaper_No->Color = clBtnFace;
    edtOwner->ReadOnly = true; //所有权人
    edtOwner->Color = clBtnFace;
    edtPropertyRight->ReadOnly = true;
    edtPropertyRight->Color = clBtnFace; //所有权性质
    edtOwnerList->ReadOnly = true; //共有人
    edtOwnerList->Color = clBtnFace;
    edtPosition->ReadOnly = true; //房屋坐落
    edtPosition->Color = clBtnFace;
    edtGround_No->ReadOnly = true; //地号
    edtGround_No->Color = clBtnFace;
    //房屋状况
    gridPropertyHourse->Options >> goEditing;
    gridPropertyHourse->Color = clBtnFace;
    memRemark->ReadOnly = true;
    memRemark->Color = clBtnFace; //附记
    cmbMaker->Color = clBtnFace;
    cmbChecker->Color = clBtnFace; //校 对 人

     /*----------------------------*/ //共有权人列表
    gridOwnerList->Options >> goEditing;
    gridOwnerList->Color = clBtnFace;

    EdtPrice->ReadOnly = true; //契价
    EdtPrice->Color = clBtnFace;
    //契价种类
    cmbTaxRace->Color = clBtnFace; //契税税率
    edtTax->Color = clBtnFace;
    edtTax->ReadOnly = true; //纳税金额
    edtNote->Color = clBtnFace; //备 注
    //他项权利摘要
    gridOtherProperty->Options >> goEditing;
    gridOtherProperty->Color = clBtnFace;
    edtUsedAreaM2->ReadOnly = true; //使用土地面积
    edtUsedAreaM2->Color = clBtnFace;
    edtUsedArea->ReadOnly = true; //平方米合  亩

    edtUsedArea->Color = clBtnFace;
    // edtFile->Text = "";       //土地使用证字号
    edtFileNo->ReadOnly = true;
    edtFileNo->Color = clBtnFace;
    cmbManageUnit->Color = clBtnFace;

    cmbTaxType->Color = clBtnFace;
    cmbTaxRace->Color = clBtnFace;
    dataStartData->Color = clBtnFace;
    dataSendOutDate->Color = clBtnFace;
    edtFile->Color = clBtnFace;


}

//----------------------------------------------------------------
void __fastcall TfmPPaper::ControlWriteFun()
{
    edtOwner->ReadOnly = false; //所有权人
    edtOwner->Color = clWindow;


    edtPosition->ReadOnly = false; //房屋坐落
    edtPosition->Color = clWindow;
    edtGround_No->ReadOnly = false; //地号
    edtGround_No->Color = clWindow;
    //房屋状况
    gridPropertyHourse->Options << goEditing;
    gridPropertyHourse->Color = clWindow;
    memRemark->ReadOnly = false;
    memRemark->Color = clWindow; //附记
    cmbMaker->Color = clWindow;
    cmbChecker->Color = clWindow; //校 对 人

     /*----------------------------*/ //共有权人列表
    gridOwnerList->Options << goEditing;
    gridOwnerList->Color = clWindow;
    EdtPrice->ReadOnly = false; //契价
    EdtPrice->Color = clWindow;
    //契价种类

    cmbTaxRace->Color = clWindow; //契税税率
    cmbTaxType->Color = clWindow;
    cmbTaxRace->Color = clWindow;
    edtTax->ReadOnly = false; //纳税金额
    edtTax->Color = clWindow;
    edtNote->Color = clWindow; //备 注
    //他项权利摘要
    gridOtherProperty->Options << goEditing;
    gridOtherProperty->Color = clWindow;

    edtUsedAreaM2->ReadOnly = false; //使用土地面积
    edtUsedAreaM2->Color = clWindow;

    edtUsedArea->ReadOnly = false; //平方米合  亩
    edtUsedArea->Color = clWindow;

    edtFileNo->Color = clWindow;
    edtFileNo->ReadOnly = false;
    cmbManageUnit->Color = clWindow;
    dataStartData->Color = clWindow;
    dataSendOutDate->Color = clWindow;
}


void __fastcall TfmPPaper::actSearchExecute(TObject *Sender)
{
    TLocateOptions Opts;
    Opts.Clear();
    Opts << loPartialKey;
    Variant locvalue;
    locvalue = Variant(edtLocate->Text);
    qryIndex->Locate("Paper_NO", locvalue, Opts);

}

//---------------------------------------------------------------------------





void __fastcall TfmPPaper::ClearFormFun()
{

    //界面清空
    edtPaper_No->Text = ""; //桂房证字号清空
    edtOwner->Text = ""; //所有权人
    //cmbPropertyRight->Text = "";      //所有权性质
    edtOwnerList->Text = ""; //共有人
    edtPosition->Text = ""; //房屋坐落
    edtGround_No->Text = ""; //地号
    //房屋状况
    for (int i = 0; i < gridPropertyHourse->RowCount; i++)
    {
        for (int j = 0; j < gridPropertyHourse->ColCount; j++)
        {
            gridPropertyHourse->Cells[j][i] = "";
        }
    }
    memRemark->Lines->Clear(); //附记
    cmbMaker->Text = ""; //缮 证 人
    cmbChecker->Text = ""; //校 对 人

     /*----------------------------*/ //共有权人列表
    for (int i = 0; i < gridOwnerList->RowCount; i++)
    {
        for (int j = 0; j < gridOwnerList->ColCount; j++)
        {
            gridOwnerList->Cells[j][i] = "";
        }
    }
    EdtPrice->Text = ""; //契价
    cmbTaxType->Text = ""; //契价种类
    cmbTaxRace->Text = ""; //契税税率
    edtTax->Text = ""; //纳税金额
    edtNote->Text = ""; //备 注
    //他项权利摘要
    for (int i = 0; i < gridOtherProperty->RowCount; i++)
    {
        for (int j = 0; j < gridOtherProperty->ColCount; j++)
        {
            gridOtherProperty->Cells[j][i] = "";
        }
    }
    edtUsedAreaM2->Text = ""; //使用土地面积
    edtUsedArea->Text = ""; //平方米合  亩
    // edtFile->Text = "";       //土地使用证字号
    edtFileNo->Text = "";
    cmbManageUnit->Text = "";


}

//---------------------------------------------------------------------------
void __fastcall TfmPPaper::dimgPicture1DblClick(TObject *Sender)
{
    if (qryPicture->IsEmpty())
    {
        qryPicture->Append();
        qryPicture->FieldByName("Paper_NO")->Value = qryIndex->FieldByName(
            "Paper_NO")->AsString;
    }
    else
    {
        qryPicture->Edit();
    }

    if (openDgPic->Execute())
    {
        try
        {
            TBlobField *Field = (TBlobField*)qryPicture->FieldByName("Picture1")
                ;
            Field->LoadFromFile(openDgPic->FileName);
            qryPicture->Post();
        }
        __finally{}
    }
}

//---------------------------------------------------------------------------

void __fastcall TfmPPaper::dimgPicture2DblClick(TObject *Sender)
{
    if (qryPicture->IsEmpty())
    {
        qryPicture->Append();
        qryPicture->FieldByName("Paper_NO")->Value = qryIndex->FieldByName(
            "Paper_NO")->AsString;
    }
    else
    {
        qryPicture->Edit();
    }
    if (openDgPic->Execute())
    {
        try
        {
            TBlobField *Field = (TBlobField*)qryPicture->FieldByName("Picture2")
                ;
            Field->LoadFromFile(openDgPic->FileName);
            qryPicture->Post();
        }
        __finally{}
    }
}

//---------------------------------------------------------------------------